![]() 支援密碼學之指令
专利摘要:
資料處理系統2包括單一指令多重資料暫存器檔案12及單一指令多重處理電路14。單一指令多重資料處理電路14支援用於執行散列演算法之部分之密碼學處理指令的執行。運算元儲存在單一指令多重資料暫存器檔案12之內。支援密碼學之指令不遵循一般基於通道(lane-based)之處理且產生輸出運算元,在該等輸出運算元中,輸出運算元之不同部分取決於在輸入運算元之內的多個不同元素。 公开号:TW201322041A 申请号:TW101134968 申请日:2012-09-24 公开日:2013-06-01 发明作者:Matthew James Horsnell;Daniel Kershaw;Richard Roy Grisenthwaite;Stuart David Biles 申请人:Advanced Risc Mach Ltd; IPC主号:G06F21-00
专利说明:
支援密碼學之指令 本發明係關於資料處理系統之領域。更特定言之,本發明係關於在資料處理系統之內提供支援密碼學之指令。 使用資料處理系統執行密碼學操作是為人們已知的。該等已知密碼學處理操作之實例包括保全散列演算法(Secure Hash Algorithm;SHA)。SHA具有各種不同已知形式,該等形式包括SHA-1、SHA-2、SHA256及SHA512。該等演算法是運算密集的演算法。 支援該等演算法之一已知方法是使用通用處理器,該通用處理器利用該通用處理器之通用暫存器檔案執行通用指令。此方法之一個問題在於在執行該等演算法必須操縱的大量狀態資料(通常可產生160位元及160位元以上之散列值)具有如此結果:操作通常必須被同時對資料的部分操作之單獨程式指令之長序列分離且由該長序列執行,進而導致執行演算法所需之時間量及執行演算法時消耗之能量的不利增加。 另一已知方法是提供專用支援密碼學之處理器,諸如密碼學密碼學共處理器,該密碼學共處理器具有專用電路,該專用電路用於執行該演算法且通常藉由傳遞待散列之資料之開始的指針,且然後等待接收所得散列值而啟動。此方法之問題在於:由提供專用密碼學硬體產生了額外成本及複雜性。此外,在將專用硬體之操作與裝置之其他操作整合時會產生問題,諸如中斷處理、多任務等等,因為將專用密碼學硬體併入通常在資料處理系統之內提供之機制內以使用資料處理系統處理操作之該等態樣非常困難且複雜。 自一個態樣而言,本發明提供一種資料處理設備,該資料處理設備包含:單一指令多重資料暫存器檔案;及單一指令多重資料處理電路,該單一指令多重資料處理電路經耦接至該單一指令多重資料暫存器檔案且經設置以受單一指令多重資料程式指令的控制,以獨立地對儲存在單獨通道之內的單獨資料元素執行處理操作,該等單獨通道在該單一指令多重資料暫存器檔案之輸入運算元暫存器之內;其中該單一指令多重資料處理電路經設置以由進一步程式指令控制,以對向量資料值執行進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案之輸入運算元暫存器之內的資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案之輸出運算元暫存器之內的輸出運算元,該輸出運算元具有含有一值的第一部分,該值取決於在該資料元素序列之內的所有資料元素。 本發明技術認識到,許多資料處理系統已具備單一指令多重資料處理機制。該等單一指令多重資料處理機制通常包括單一指令多重資料暫存器檔案,該單一指令多重資料暫存器檔案具有能夠儲存且操縱大資料寬度運算元之大儲存容量,該等大資料寬度運算元通常在單一指令多重資料處理中涉及。在單一指令多重資料處理中,在單一程式指令之控制之下獨立地處理資料的單獨通道是正常的。例如,資料之單獨通道可包含色彩像素值或其他向量值之分量值,該等所有值皆將經受相同處理操作,諸如縮放。本發明技術認識到,單一指令多重資料暫存器檔案之儲存能力可利用進一步程式指令重複使用,該進一步程式指令不遵循單一指令多重資料程式指令之正常形式。特定言之,通道之處理不必為獨立的,且產生之輸出運算元可具有含有一值的第一部分,該值取決於在形成輸入之向量資料值之內的所有資料元素。 在單一指令多重資料程式指令之區域外的單一指令多重暫存器檔案之重複使用可應用於各種領域,諸如資料壓縮及資料密碼術。本技術尤其非常適合於資料密碼術。 在此上下文中,進一步程式指令可經安排以執行迭代處理操作,該迭代處理操作消耗連續的資料字及至少部分中間散列值以產生輸出散列值。散列值產生通常需要操縱大量的資料及暫存器檔案,同時具有儲存及操縱非常長的運算元值之能力。 進一步程式指令之一形式為其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 迭代程式指令之該形式非常適合於實施SHA-1演算法。應瞭解,上文定義之操作可以各種偽代碼形式給出,且上文定義之操作可以各種不同硬體形式實施,熟習該技術領域之技術者將很好地理解此點。特定言之,低電路額外負擔實施可再循環值以執行迭代操作,其中較高效能實施可尋求並聯執行至少部分不同迭代。 進一步程式指令之另一形式具有自該單另一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 由OP FUNC評估之函數之選擇可依賴於在進一步程式指令之內的特定欄位進行,或該選擇可依賴於在處理待散列之資料值之當前輸入區塊期間已執行多少次迭代。 在一些實施例中,單一指令多重資料暫存器檔案可能不具有將所有第一輸入運算元及第二輸入運算元儲存在單個暫存器中之能力,且因此該等輸入運算元可儲存於在單一指令多重資料暫存器檔案之內的單獨暫存器內。在其他實施例中,第一輸入運算元及第二輸入運算元可儲存在共享暫存器之內,且第一輸入運算元及第二輸入運算元可視為單個輸入運算元。 在進一步實施例中,與上述進一步程式指令結合或代替上述進一步程式指令,本發明技術可提供對進一步程式指令之支援,該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值:Qoutput[127:0]=X[127:0];其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigmal(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 以類似之方式,進一步程式指令亦可具有一形式,在該形式中,進一步程式指令具有自該單另一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 上述兩種形式之進一步程式指令特別適合於支援SHA-224演算法及SHA256演算法。 用於管理進一步程式指令之處理之機制可方便地與單一指令多重資料處理電路結合。用於管理進一步處理指令之處理之機制使用單一指令多重資料指令暫存器檔案,且當用於管理進一步程式指令之處理(例如中斷處理、排程)之機制與單一指令多重資料處理電路之機制整合時,實施可簡化。 管理可與單一指令多重資料處理電路之程式指令整合之進一步程式指令的處理之態樣包括暫存器重新命名、指令排程、指令發出、指令報廢及指令中斷。單一指令多重資料處理電路通常已包括管理且支援該等操作之電路元件,且進一步程式指令可相對容易地整合至該管理支援中。此舉提供了以下優點:若中斷在產生密碼學散列值中途發生,則正常中斷處理機制可用以服務該中斷且在服務該中斷之後重新啟動或繼續散列計算而具有較少額外管理負擔或複雜性。 對散列演算法之支援係進一步藉由提供旋轉指令增強,該旋轉指令具有輸入運算元Sm[31:0]且產生具有一值之輸出運算元Sd[31:0],該值與Sm[31:0]右旋轉兩個位元位置給出的值相同。 除產生中間散列值之外還應執行之密碼學散列演算法處理的另一態樣為更新在正在處理的檔案之內的資料元素之排程。應根據散列產生之工作負載平衡該排程更新,以免引入處理量之不利瓶頸。因此,本發明之一些實施例規定該單一指令多重資料處理電路經設置以由第一排程更新指令控制,該第一排程更新指令具有第一輸入運算元Sp[127:0]及第二輸入運算元Sq[127:0]且產生具有一值之輸出運算元Sr[127:0],該值與由以下步驟給出之值相同:T[127:0]={Sp[63:0]:Sq[127:64]}及Sr[127:0]=T[127:0]XOR Sr[127:0]XOR Sq[127:0]. 此外,一些實施例規定該單一指令多重資料處理電路經設置以由第二排程更新指令控制,該第二排程更新指令具有輸入運算元Ss[127:0]且產生具有一值之輸出運算元St[127:0],該值與由以下步驟給出之值相同:T[127:0]=St[127:0]XOR{32{0}:Ss[127:32]};St[95:0]={T[94:64]:T[95]:T[62:32]:T[63]:T[30:0]:T[31]};及St[127:96]=({T[126:96]:T[127]})XOR({T[29:0]:T[31:30]}). 上述兩種形式之程式指令特別適合於支援SHA-256及SHA-224演算法。 為了幫助支援其他形式之散列演算法之排程產生,如此該單一指令多重資料處理電路之一些實施例經設置以由第一排程更新指令控制,該第一排程更新指令具有輸入運算元Sp[127:0]且產生具有一值之輸出運算元Sq[127:0],該值與由以下步驟給出之值相同:T[127:0]={Sp[31:0]:Sq[127:32]};T[127:0]=VecROR32(T[127:0],7)XOR VecROR32(T[127:0],18)XOR VecROR32(T[127:0],3);及Sq[127:0]=VecADD32(T[127:0],Sq[127:0]),其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至在B之內的相應32位元字。 進一步實施例另外提供該單一指令多重資料處理電路,該單一指令多重資料處理電路經設置以由第一排程更新指令控制,該第一排程更新指令具有第一輸入運算元Sp[127:0]及第二輸入運算元Sq[127:0]且產生具有一值之輸出運算元Sr[127:0],該值與由以下步驟給出之值相同:T0[127:0]={Sq[31:0]:Sp[127:32]};T1[63:0]=Sq[127:64];T1[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[63:0],T0[63:0]);T1[63:0]=VecADD32(T3[63:0],T1[63:0]);T2[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[127:64],T0[127:64]);及Sr[127:0]={VecADD32(T3[63:0],T2[63:0]):T1[63:0]},其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至B之內的相應32位元字。 上述兩種形式之程式指令特別適合於支援SHA-256演算法。 自另一態樣而言,本發明提供資料處理設備,該資料處理設備包含:單一指令多重資料暫存器檔案構件,用於儲存單一指令多重資料運算元;及單一指令多重資料處理構件,用於在單一指令多重資料程式指令之控制下執行處理操作,該單一指令多重資料處理構件經耦接至該單一指令多重資料暫存器檔案構件,且對儲存在該單一指令多重資料暫存器檔案構件之輸入運算元暫存器之內的單獨通道內之單獨資料元素獨立地執行該處理操作;其中該單一指令多重資料處理構件係由進一步程式指令控制,以對向量資料值執行進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案構件之輸入運算元暫存器之內的資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案構件之輸出運算元暫存器之內的輸出運算元,該輸出運算元具有含有一值的第一部分,該值取決於在該資料元素序列之內的所有資料元素。 自本發明之進一步態樣而言,本發明提供一種處理資料之方法,該方法包含以下步驟:將單一指令多重資料運算元儲存在單一指令多重資料暫存器檔案之內;在單一指令多重資料程式指令之控制下,獨立地對儲存在該單一指令多重資料暫存器檔案之輸入運算元暫存器之內的單獨通道內的單獨資料元素執行處理操作;及在進一步程式指令之控制下,對向量資料值執行進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案之輸入運算元暫存器之內的資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案之輸出運算元暫存器之內的輸出運算元,該輸出運算元具有含有一值的第一部分,該值取決於在該資料元素序列之內的所有資料元素。 本發明之另一態樣提供虛擬機實施,該虛擬機實施提供在通用電腦上之執行環境,該執行環境許可上文詳述之程式指令如同該等程式指令在上文詳述之資料處理設備上執行一樣執行。在本文中涵蓋本技術之該等虛擬機實施。 第1圖示意圖示形式為中央處理單元4之資料處理設備2,該中央處理單元4耦接至記憶體6,該記憶體6儲存待操縱之資料及待執行之程式指令。中央處理單元4包括通用暫存器檔案8、通用處理電路10、單一指令多重資料暫存器檔案12及單一指令多重資料處理電路14。通用暫存器檔案8通常含有低位元寬度通用暫存器(例如32位元或64位元),諸如具有由Cambridge,England之ARM Limited生產之處理器的通用暫存器檔案支援之形式之暫存器。單一指令多重資料暫存器檔案12通常包括更大的暫存器,且在單一指令多重資料暫存器檔案12之內的資料儲存可取決於所利用之暫存器大小說明符以不同方式劃分以形成不同暫存器。單一指令多重資料暫存器檔案12之形式可為在由Cambridge,England之ARM Limited生產之處理器之一些實施中支援的Neon暫存器檔案之形式。 通用暫存器重新命名及計數電路(score boarding circuitry)16與通用暫存器檔案10相關聯,且單一指令多重資料暫存器重新命名及計數電路18與單一指令多重資料暫存器檔案12相關聯。暫存器重新命名及計數自身是將為本技術領域中之工人所熟知的已知技術且將不再於本文中進一步描述。與提供暫存器重新命名及計數用於一般單一指令多重資料處理指令之方式相同,暫存器重新命名及計數可應用於在下文中進一步描述之密碼學處理指令之支援中所利用的暫存器。因此,已提供用於支援暫存器重新命名、指令排程、指令發出、指令報廢及指令中斷之機制可由支援密碼學之程式指令重新使用,且相應地,該等支援密碼學之指令之操作可較好地與中央處理單元4之整體操作整合。 程式指令I係接收自記憶體6且傳遞至指令管線20。指令解碼器22將程式指令解碼且產生控制訊號,該控制訊號控制暫存器檔案8、12及處理電路10、14,以及在中央處理單元4之內的其他元件之操作。中斷電路24回應於外部產生的中斷訊號int以中斷當前由中央處理單元4執行之處理,且開始執行為本技術領域中之彼等技術者所熟知的中斷處理碼。應瞭解,中央處理單元4通常將包括許多附加電路元件,且為了清楚起見,已將該等附加電路元件從第1圖中省略。 第2圖示意圖示在散列產生演算法之一形式之內的資料流。待散列之檔案26被分割成64位元組區塊28,該64位元組區塊28經進一步分割成作為一輸入提供至散列演算法30之四個32位元字的輸入向量。亦在散列操作之開始時提供散列種子值32。散列操作使用兩個主程式迴路,該兩個主程式迴路分別負責散列更新34及排程更新36。該等主迴路係藉由在單一指令多重資料處理電路14中提供支援兩個迴路之專用程式指令來平衡。中間散列值38由散列更新迴路34產生且作為散列演算法回饋,該散列演算法持續處理輸入資料之區塊28。當已處理區塊28(例如,在SHA-1之情況下經歷80個散列更新)時,輸出散列值40然後係藉由將當前中間散列值38添加至該輸出散列值40中而更新。重複該方法直至所有檔案26已消耗為止。此舉總體上產生檔案26之所得散列值。 散列更新迴路34將被執行多次,且散列更新迴路34自身執行指令,該等指令中之每一指令具有將如下所述之該等指令自身之指令內部迭代。執行排程更新36以便平衡散列更新。排程更新可經向量化以改良效能,如將在下文中描述。 第3圖示意圖示根據本發明技術之進一步處理指令如何接收包含複數個資料元素之向量資料值42。然後,支援密碼學之指令對該向量資料值42執行處理操作以產生具有第一部分44之輸出運算元,該第一部分44取決於向量資料值42之第一資料元素及在向量資料值之內的兩個或兩個以上進一步資料元素兩者。該行為與典型單一指令多重資料程式指令形成對比,在該等典型單一指令多重資料程式指令中處理操作是基於通道的且在不同通道之內的資料值之間存在有限的互動。 本技術之一實施是一組指令,該組指令將兩個演算法作為目標,亦即,演算法SHA-1及SHA-256。指令亦對SHA-224演算法有利,SHA-224演算法需要與SHA-256相同的操作。SHA演算法為由國家標準技術局(National Institute of Standards and Technology;NIST)規定之保全散列演算法系列。該等演算法之之規範公開可用。該等演算法通常用於驗證在數位系統之內的資料。 吾人從描述SHA演算法之高階操作且包括用於SHA-1及SHA-256演算法之偽碼開始。 SHA演算法之高階操作(已知;FIPS 180-4) 演算法中之每一者處理64位元組之資料,且產生散列摘要;在SHA-1之情況下,資料為160位元之長度,且在SHA-256之情況下,資料為256位元之長度。長度大於64位元組之資料串流被分為64位元組區塊。在串流或區塊之長度小於64位元組之情況下,可按照在聯邦資訊處理標準(Federal Information Processing Standard;FIPS)180-4中所規定將區塊填充至64位元組。 除非另有說明,否則演算法之以下描述假設一字為32位元無符號整數值。假設字由來自雙模二元資料格式形式之64位元組之區塊的資料之4個相連位元組組成。 兩個演算法藉由初始化工作散列摘要開始。若資料區塊為給定資料串流中之第一者,則將散列摘要初始化至固定種子值。若區塊為資料串流之延續,則將散列摘要初始化至由先前區塊計算之散列摘要。在FIPS 180-4中規定種子值。 演算法使用排程更新操作擴展區塊。對於SHA-1,此擴展將區塊自初始16資料字擴展為80資料字;對於SHA-256,此擴展將區塊自初始16資料字擴展為64資料字。排程更新操作使用固定邏輯異或(xors)將來自排程之四個字結合,並且將該四個字移位且旋轉,以在擴展排程中產生下一個字。初始16個字在擴展排程中保持不變。 然後,擴展排程中之每一字具有添加至該字之鍵值。在SHA-1中,存在4個鍵常數,每一鍵常數應用於來自擴展區塊之一組20個字。在SHA-256中,存在64個鍵常數,擴展區塊之每一字有一個鍵常數。在FIPS 180-4中定義鍵常數。 在已擴展區塊且已添加鍵常數之後,使用散列更新函數處理每一字,該散列更新函數經由一系列固定邏輯異或併入該字,並且將彼字移位且旋轉至散列摘要中。 最終,在已使用散列更新函數處理來自擴展區塊的每一字之後,將散列摘要添加至先前散列摘要值。 如FIPS 180-4中所規定,排程可實施為80/64字(SHA-1/SHA-256)之集合或實施為16字之循環佇列。 為完整起見,假定循環佇列之SHA-1及SHA-256之偽碼演算法如下。 SHA-1演算法偽碼 uint32 w[0:15]=16 4-bytes(big-endian)input[];uint32 wk[0:15]=w[0:15]+k[0:15];uint32 a:e=io->hashes[0:4];forround=0:63{hash_update(round,wk[round]);w[round]=schedule_update(round,w);wk[round]=w[round]+k[round];}For round=64:79 hash_update(round,w[round]);io->hashes[0:4]+=a:e;SHA-1散列更新代碼如下:hash_update(int round,uint32 wk){e+=FN(round,b,c,d)+ROL(a,5)+wk;b=ROL(b,30);rotate(a,b,c,d,e)to(e,a,b,c,d)} 其中:if round<20,FN=choose(b,c,d);else if round <40,FN=parity(b,c,d);else if round<60,FN=majority(b,c,d);else FN=Parity(b,c,d);choose(b,c,d)=(((c^d)&b)^d)parity(b,c,d)=(b^c^d)majority(b,c,d)=(b&c)|((b|c)&d) SHA-1排程更新代碼如下:uint32 schedule_update(int round,uint32 *w){return ROR(w[round-3]^w[round-8]^w[round-14]^w[round-16],31);} SHA-256演算法偽碼 uint32 a:h=io->hashes[0:7];uint32 w[0:15]=16 4-bytes(big-endian)input[0:63];uint32 wk[0:15]==w[0:15]+k[0:15];for round=0:47{hash_update(wk[round]);w[round]=schedule_update(round,w);wk[round]=w[round]+k[round];}for round=48:63 hash_update(wk[round]);io->hashes[0:7]+=a:h;SHA-256散列更新代碼如下:hash_update(uint32 wk){t=h+Sigma1(e)+Choose(e,f,g)+wk;d+=t;h=t+Sigma0(a)+Majority(a,b,c);rotate(a,b,c,d,e,f,g,h)to(h,a,b,c,d,e,f,g);} 其中:Sigma0(x)=ror(x,2)^ror(x,13)^ror(x,22);Sigma1(x)=ror(x,6)^ror(x,11)^ror(x,25);Choose(b,c,d)=(((c^d)&b)^d)Majority(b,c,d)=((b&c)|((b|c)&d) 同樣地,SHA-256排程更新偽碼如下:uint32 schedule_update(int round,uint32 *w){return w[round]+sigma1(w[round-2])+w[round-7]+sigma0(w[round-15]);}其中:sigma0(x)=ror(x,7)^ror(x,18)^shr(x,3);sigma1(x)=ror(x,17)^ror(x,19)^shr(x,10); SHA演算法工作狀態(可源自FIPS 180-4規範) 約束經採用以加速SHA演算法之方法之SHA演算法的一態樣為處理資料區塊所需要之工作狀態量(如先前所述)。單一指令多重資料暫存器檔案保持且操縱此狀態之能力解決該約束。 下表概括對於SHA-1及SHA-256之狀態要求。 SHA-1狀態 SHA-256狀態 使用SHA-1或SHA-256演算法中之任一者構建能夠處理資料區塊之專用SHA單元(例如,共處理器)需要投資在固定目標狀態中。該狀態無法輕易地由RISC微處理器上之其他操作使用。 將SHA演算法分成三元形式RISC指令 為了避免固定目的狀態,吾人已藉由可於RISC微處理器上處理演算法之方法將該等演算法分離,該RISC微處理器監視三元指令格式且使用單一指令多重資料處理電路及暫存器檔案。 RISC三元形式之典型約束為三個暫存器中之僅一個暫存器被定義為目標地。然而,目標地可使用為來源。 吾人使用SIMD暫存器以便可處理比使用通用暫存器的每指令處理之資料更多之資料。 藉由監視三元指令格式,指令能夠使用為現代微處理器所常見之重新命名、排程、發出、所得及報廢邏輯。 由於所有狀態及相依性係由指令定義,所以處理亂序執行、中斷及思考之管線機制仍然有效;不需要附加控制邏輯即可以保持所提議指令之正確執行。 SHA-1散列更新指令 如先前所述之SHA-1散列更新函數將32位元字併入160位元散列摘要中。函數由固定移位、固定邏輯異或/邏輯和(and)/邏輯或(ors)及固定旋轉組成。 hash_update(int round,uint32 wk){e+=FN(round,b,c,d)+ROL(a,5)+wk;b=ROL(b,30);rotate(a,b,c,d,e)to(e,a,b,c,d)}where:if round<20,FN=choose(b,c,d);else if round<40,FN=parity(b,c,d);else if round<60,FN=majority(b,c,d);else FN=Parity(b,c,d);choose(b,c,d)=(((c^d)&b)^d)parity(b,c,d)=(b^c^d)majority(b,c,d)=(b&c)|((b|c)&d) SHA-1散列摘要為160位元,且因此對整個摘要加上32位元字進行之操作不可能為32位元之通用三元RISC格式,且該等操作將需要很大努力才能實現為64位元通用三元RISC格式;將需要更多內務處理才能將32位元資料值插入第三64位元運算元之高32位元中。 為此,該示例性技術將SHA-1散列函數映射至一組四個高階SIMD指令上;該四個高階SIMD指令為SHA1C、SHA1P、SHA1M及SHA1H。 SHA1C Qd,Sn,Vm.4S[OP=C,OP_FUNC=choose]SHA1P Qd,Sn,Vm.4S[OP=P,OP_FUNC=parity]SHA1M Qd,Sn,Vm.4S[OP=M,OP_FUNC=majority]SHA1H Sd,Sn 指令SHA1C、SHA1P及SHA1M採用三個運算元。Qd保持摘要散列之前4個32位元字,其中Sn保持第5個32位元字。第三運算元Vm為一向量,該向量在初始實施例中保持四個32位元字。如此允許待由指令處理之散列更新函數之4個迭代。偽碼定義該等指令之操作如下。應瞭解,根據偽碼定義指令之操作將為本技術領域中之彼等技術者所熟知,且一旦已定義偽碼,則進行(執行)由偽碼定義之指令之電路的實現是常規任務。 相應地,根據示例性實施例,單一指令多重資料處理電路經設置以由進一步程式指令控制,該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值:其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 該等指令之另一實現可涉及用於在choose()函數、parity()函數及majority()函數之間選擇之選擇。 SHA1HASHQd,Sn,Vm.4S,#OP//#OP其中#_1選擇C,#_2選擇P,#_3選擇M。 RISC指令格式之約束在於僅散列摘要之前4個字可由SHA1C、SHA1P及SHA1M指令返回至128位元暫存器Qd中。因此,建議指令SHA1H返回散列摘要之第5個字。 在首次實現中,SHA1H可實施為:SHA1H Sd,Sn Sd=ROR(Sn,2);此舉遵循以下監視:在四次迭代後第5散列摘要值為Qd[0]之初始值的旋轉。 SHA1散列更新指令變體 SHA1C指令、SHA1P指令及SHA1M指令之變體可由本發明技術之其他變體擴展以允許Vm.8S或Vm.16S運算元。該等變體包括在本發明技術之內。如此將允許在單一指令之內處理散列更新函數之8次及16次迭代。亦即,仍將需要Vm.4S變體,因為需要散列更新函數才能每20個迭代之後變化。 作為一實例,該SHA1<OP>Vm.8S變體:SHA1<OP>Qd,Sn,Vm.8S X=Qd;Y=Sn;for(i=0 to 7){Index=(i*32);t1<31:0>=OP_FUNC(X<63:32>,X<95:64>,X<127:96>);Y=Y+ROL(X<31:0>,5)+t1<31:0>+Vm<(index+31):index>;X<63:32>=ROL(X<63:32>,30);//Rotate t2<31:0>=Y;Y=X<127:96>;X<127:0>={X<95:0>:t2<31:0>};}Qd=X;操作過8次迭代及16次迭代(Vm.8S及Vm.16S)之變體將另外需要SHA1C2指令、SHA1P2指令及SHA1M2指令。該等指令將在8次或16次迭代之後為散列摘要中之第5個字產生適當值。該等新的指令將以與SHA1C指令、SHA1P指令及SHA1M指令類似之方式實施,但是在Qd暫存器中返回第5個散列摘要字,例如:SHA1<OP>2 Qd,Sn,Vm.8S X=Qd;Y=Sn;for(i=0 to 3){Index=(i*32);t1<31:0>=OP_FUNC(X<63:32>,X<95:64>,X<127:96>);Y=Y+ROL(X<31:0>,5)+t1<31:0>+Vm<(index+31):index>;X<63:32>=ROL(X<63:32>,30);//Rotate t2<31:0>=Y;Y=X<127:96>;X<127:0>={X<95:0>:t2<31:0>};}Od={0:Y<31:0>};相應地,根據示例性實施例,單一指令多重資料處理電路經設置以由進一步程式指令控制,該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 若較寬SIMD資料路徑可用,可實現指令之其他變體,該其他變體將整個散列摘要返回成為八位元字(8x32位元):SHA1<OP>Od,Vn.4S SHA1<OP>Od,Vn.8S 該等指令將處理散列函數之4次及8次迭代。 SHA1散列更新微架構選項 對於該等指令之微架構實施存在各種選項: 該等指令之高效能實現可選擇增建一些迭代邏輯且執行更多並行化執行。 微架構可選擇使用多循環級以減少暫時管線狀態,且因此減少功率消耗。 可以進位儲存形式進行中間架構。 在更廣泛的變體中,在可能需要顯式SHA1<OP>2指令之情況下,偵測SHA1<OP>2操作何時遵循相應SHA1<OP>函數是有可能的。在彼等情況下,防止第二計算且僅轉發來自資料路徑之結果應是可能的。如此將在管線中需要一些暫時狀態。 SHA1排程更新指令 實現自SHA-1演算法之加速需要在散列更新函數與排程更新函數之間的平衡。 如先前所述之SHA-1排程更新函數將來自資料排程之四個32位元字結合為單一所得字,該單一所得字擴展排程,或在循環佇列之情況下,該單一所得字將排程中之字重寫。 排程更新操作由邏輯異或及固定旋轉組成。 uint32 schedule_update(int round,uint32*w){return ROR(w[round-3]^w[round+8]^w[round-14]^w[round-16],31);} 或在循環佇列形式中:Void schedule_update(int round,uint32 w[0..15]){w[round]=ROR(w[round+13mod16]^w[round+8mod16]^w[round+2mod16]^w[round],31);} 操作需要四個輸入值,該四個輸入值中之一個值具有破壞性。如此不符合通用32個三元RISC格式。 排程更新指令可由ARM高階SIMD架構提供。 為了避免記憶體負載及記憶體儲存,吾人選擇實施有效執行在FIPS 180-4中描述之循環佇列形式之排程更新的指令。 為了完整起見,吾人包括用於排程更新之向量化方法。 SHA-1排程更新向量化及替代 如此遵循w[round]、w[round+1mod16]及w[round+2mod16]可以平行處理之監視。在計算w[round+3mod16]時具有對w[round]之相依性,該相依性防止直接路由到四向向量化。 w[round]=ROR(w[round+13]^w[round+8]^w[round+2]^w[round]),31);w[round+1]=ROR(w[round+14]^w[round+9]^w[round+3]^w[round+1]),31);w[round+2]=ROR(w[round+15]^w[round+10]^w[round+4]^w[round+2]),31);w[round+3]=ROR(w[round]^w[round+11]^w[round+5]^w[round+3]),31);該限制可藉由在w[round+3mod16]之計算中將零替代為值w[round],且藉由用附加邏輯異或及旋轉步驟修復該結果來克服;該情況說明如下。 w[round]=ROR(w[round+13]^w[round+8]^w[round+2]^w[round]),31);w[round+1]=ROR(w[round+14]^w[round+9]^w[round+3]^w[round+1]),31);w[round+2]=ROR(w[round+15]^w[round+10]^w[round+4]^w[round+2]),31);w[round+3]=ROR(0^w[round+11]^w[round+5]^w[round+3]),31);w[round+3]=w[round+3]^ROR(w[round],31);可將上述程式碼區塊重新因素化以對具有4x32位元之資料路徑大小的SIMD架構利用4通道向量操作。 SHA-1排程更新及散列更新平衡 為了使排程更新操作與散列更新操作平衡,可如先前所述處理排程更新,亦即,使用四向向量化處理排程更新。如此允許單個排程更新為後續散列函數指令產生足夠的4x32位元字之資料。 在合理的SIMD實施中,與用以執行建議的SHA-1散列函數之彼等技術相比,向量化技術將進行更多執行循環以計算排程資料。 對此存在數個原因: 含有元素{round+2,round+3,round+4,round+5}之向量可能將橫跨兩個向量暫存器。 含有元素{round+13,round+14,round+15,0}之向量將需要自一個向量暫存器及零向量中擷取。 SIMD向量旋轉在例如ARM高階SIMD之SIMD指令集中並不常見。因此向量旋轉需要兩個向量位移及or指令。 歸因於Amdahl定律,應平衡SHA-1演算法之兩個部分,否則較慢部分將限制可達成之加速量。 該監視產生用於加速SHA-1排程更新函數之以下SIMD指令。 SHA1SU0 Vd.4S,Vn.4S,Vm.4S T<127:0>=Vn<63:0>:Vd<127:64>Vd=T XOR Vd XOR Vm SHA1SU1 Vd.4S,Vn.4S T<127:0>=Vd XOR{32{0}:Vn<127:32>};Vd<95:0>=T<94:64>:T<95>:T<62:32>:T<63>:T<30:0>:T<31>;Vd<127:96>=(T<126:96>:T<127>)XOR(T<29:0>:T<31:30>);指令假設循環佇列常駐於四個4x32位元向量暫存器中。 在指令內部牽引元素之重新排序。如此有效地使元素之重新排序自由,該等元素正好為微架構中之線路。 固定旋轉亦僅為線。 在大部分微架構中,平衡指令且指令可具有極低的循環潛時;該等指令包含串列及佈線中之兩個邏輯異或。 因此,根據示例性實施例,該單一指令多重資料處理電路經設置以由第一排程指令控制,該第一排程指令具有第一輸入運算元Sp[127:0]及第二輸入運算元Sq[127:0]且產生具有一值之輸出運算元Sr[127:0],該值與由以下步驟給出之值相同:T[127:0]={Sp[63:0]:Sq[127:64]}及Sr[127:0]=T[127:0]XOR Sr[127:0]XOR Sq[127:0]. 將SHA-2演算法作為目標之指令 在針對SHA-1演算法提出之指令之論述中所概括的許多特徵可同樣地適用於SHA-2演算法。本節將描述針對SHA-2演算法提出之指令中之差異。 SHA-2散列更新指令 由於針對SHA-1概括之原因,SHA-2散列更新函數被由兩個散列更新指令作為目標。 SHA-2演算法之工作散列摘要為256位元或者512位元。以下聚焦於演算法SHA-256及SHA-224,該演算法SHA-256及SHA-224具有256位元之工作散列,因為該等演算法包含於本發明之初始實現中。在稍後的章節中論述本發明技術如何應用於SHA-512、SHA-384、SHA-512/256及SHA-512/224。 SHA-256散列更新指令 SHA-256(及SHA-224)之工作散列摘要為256位元長。在具有暫存器寬度為128位元之SIMD架構中,對散列摘要之任何操作之結果需要兩個指令;一個指令返回前4x32位元字,且第二指令返回剩餘4x32位元字。 不同於SHA-1,SHA-2散列更新函數是固定的且在給定數目之迭代之後不變化,因此,吾人僅需要兩個指令。 Qd=X;相應地,根據示例性實施例,單一指令多重資料處理電路經設置以由進一步程式指令控制,該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 相應地,根據示例性實施例,單一指令多重資料處理電路經設置以由進一步程式指令控制,該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之第一輸入運算元Qd[127:0]及第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之值: 其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 SHA256H預期散列摘要之前4x32位元字在Qd中,預期剩餘4x32位元字在Qn中且SHA256H預期排程資料之4x32位元字在Vm.4S中。 SHA256H2預期散列摘要之第二4x32位元字在Qd中,預期前4x32位元字在Qn中且SHA256H2預期排程資料之4x32位元字在Vm.4S中。 請注意,因為SHA256H破壞散列摘要之前4x32位元字,所以在執行SHA256H之前必須進行複製以便正確值可經傳遞至Qn中之SHA256H2。 SHA-256散列更新指令變體 如先前對於SHA-1散列更新指令所概述,用於較寬向量SIMD之SHA-256指令之變體可包括以下各者:SHA256(H|H2)Qd,Qn,Vm.8S SHA256(H|H2)Qd,Qn,Vm.16S 該等指令將分別處理散列更新函數之8次及16次迭代。較寬的SIMD資料路徑亦可允許:SHA256HOd,Vm.8S SHA256HOd,Vm.16S 在Od為256位元寬暫存器之情況下,不必提供SHA256H2操作,整個散列摘要將適合在向量暫存器中。 SHA-256排程更新 如先前所概述,對於SHA-1,實現來自SHA-256演算法之加速需要在散列更新函數與排程更新函數之間的平衡。 SHA-256排程更新函數將來自資料排程之四個32位元字結合為單一所得字,該單一所得字擴展排程,或在循環佇列之情況下,該單一所得字將排程中之字重寫。 排程更新操作由邏輯異或、固定移位及固定旋轉(已知)組成。 uint32 schedule_update(int round,uint32*w){return w[round]+sigma1(w[round-2])+w[round-7]+sigma0(w[round-15]);} 其中:sigma0(x)=ror(x,7)^ror(x,18)^shr(x,3);sigma1(x)=ror(x,17)^ror(x,19)^shr(x,10);此亦可在循環佇列中表達(已知):void schedule_update(int round,uint32*w){w[round]=sigma1(w[round+14mod16])+w[round+9mod16]+sigma0(w[round+1mod16]);} SHA-256排程更新向量化及替代 SHA-256排程更新函數亦可以適合於4向SIMD之方式被向量化。 w[round]=sigma1(w[round+14])+w[round+9]+sigma0(w[round+1]);w[round+1]=sigma1(w[round+15])+w[round+10]+sigma0(w[round+2]);w[round+2]=sigma1(w[round])+w[round+11]+sigma0(w[round+3]);w[round+3]=sigma1(w[round+1])+w[round+12]+sigma0(w[round+4]);請注意,存在兩個相依性,亦即w[round]及w[round+1]。用於SHA-256之替代法藉由代入零值且然後決定結果而像以前一樣起作用。該方法說明如下:w[round]=sigma1(w[round+14])+w[round+9]+sigma0(w[round+1]);w[round+1]=sigma1(w[round+15])+w[round+10]+sigma0(w[round+2]);w[round+2]=sigma1(w[0])+w[round+11]+sigma0(w[round+3]);w[round+3]=sigma1(w[0])+w[round+12]+sigma0(w[round+4]);w[round+2]+=sigma1(w[round]);w[round+3]+=sigma1(w[round]);可將上述程式碼區塊重新因素化以對具有4x32位元之資料路徑大小的SIMD架構利用4通道向量操作。 SHA-256排程更新及散列更新平衡 為了使排程更新操作與散列更新操作平衡,吾人提出如先前所述處理排程更新,亦即,使用四向向量化處理排程更新。如此允許單個排程更新為後續散列函數指令產生足夠的4x32位元字之資料。 在合理的SIMD實施中,與用以執行建議的SHA-1散列函數之彼等技術相比,向量化技術將進行更多執行循環以計算排程資料。 對此存在數個原因: 含有元素{round+1,round+2,round+3,round+4}及{round+9,round+10,round+11,round+12}之向量將跨越多於一個向量暫存器。 含有{round+14,round+15,0,0}之暫存器將需要使用擷取組成。 sigma操作含有旋轉,且SIMD向量旋轉在例如ARM高階SIMD之SIMD指令集中不常見。在該等架構中之向量旋轉需要兩個向量位移及OR指令。 考慮替代之決定亦將需要擷取暫存器。 sigma0及sigma1操作由大約7個向量操作組成。 歸因於Amdahl定律,需要平衡SHA-256演算法之兩部分以免較慢部分限制可達成之加速量。 該等監視產生用於加速SHA-256排程更新函數之以下SIMD指令。 SHA256SU0 Vd.4S,Vn.4S T<127:0>=Vn<31:0>:Vd<127:32>T<127:0>=VecROR32(T,7)XOR VecROR32(T,18)XOR VecSHR32(T,3)Vd=VecADD32(T,Vd)SHA256SU1 Vd.4S,Vn.4S,Vm.4S T0<127:0>=Vm<31:0>:Vn<127:32>T1<63:0>=Vm<127:64>T1<63:0>=VecROR32(T1<63:0>,17)XOR VecROR32(T1<63:0>,19)XOR VecSHR32(T1<63:0>,10)T3<63:0>=VecADD32(Vd<63:0>,T0<63:0>)T1<63:0>=VecADD32(T3<63:0>,T1<63:0>)T2<63:0>=VecROR32(T1<63:0>,17)XORVecROR32(T1<63:0>,19)XOR VecSHR32(T1<63:0>,10)T3<63:0>=VecADD32(Vd<127:64>,T0<127:64>)Vd=VecADD32(T3<63:0>,T2<63:0>):T1<63:0> 指令假設循環佇列常駐於四個4x32位元向量暫存器中。指令不排除使用排程擴展。 在指令內部牽引元素之重新排序及擷取。然後,微架構能夠選擇以將該等及固定移位與旋轉實施為接線。 在大部分微架構中,指令可具有低循環潛時。 因此,根據示例性實施例,單一指令多重資料處理電路經設置以由第一排程指令控制,該第一排程指令具有輸入運算元Sp[127:0]且產生具有一值之輸出運算元Sq[127:0],該值與由以下步驟給出之值相同:T[127:0]={Sp[31:0]:Sq[127:32]};T[127:0]=VecROR32(T[127:0],7)XOR VecROR32(T[127:0],18)XOR VecROR32(T[127:0],3);及Sq[127:0]=VecADD32(T[127:0],Sq[127:0]),其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至在B之內的相應32位元字。 因此,根據示例性實施例,單一指令多重資料處理電路經設置以由第二排程指令控制,該第二排程指令具有第一輸入運算元Sp[127:0]及第二輸入運算元Sq[127:0]且產生具有一值之輸出運算元Sr[127:0],該值與由以下步驟給出之值相同:T0[127:0]={Sq[31:0]:Sp[127:32]};T1[63:0]=Sq[127:64];T1[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[63:0],T0[63:0]);T1[63:0]=VecADD32(T3[63:0],T1[63:0]);T2[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[127:64],T0[127:64]);及Sr[127:0]={VecADD32(T3[63:0],T2[63:0]):T1[63:0]},其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至B之內的相應32位元字。 在SHA-256與SHA-512之間的差異 SHA-512演算法非常類似於SHA-256演算法。在描述對SHA-256之支援的章節中概述之相同方法可同樣地應用於SHA-512,僅存在以下小的不同:輸入資料分成128位元組之區塊,且以雙模二元資料格式處理為16x64位元字。 SHA-512對8x64位元字有效 SHA-512需要散列函數之80次迭代。 散列函數及排程更新對64位元字有效,且散列函數及排程更新含有不同固定移位、旋轉,及邏輯異或。 為了簡便起見,吾人忽略SHA-512演算法。 將SHA-512、SHA-384、SHA-512/256及SHA-512/256演算法作為目標之指令。 將SHA-256作為目標之指令的目的與對於SHA-512演算法之目的相同。吾人列出將SHA-512作為目標之該等指令的可能實現。 在SIMD暫存器為128位元,且假定每散列4次迭代及排程指令之情況下:SHA512H{Qd,Qd+1},{Qn,Qn+1},{Vm.2D,Vm+1.2D}SHA512H2{Qd,Qd+1},{Qn,Qn+1},{Vm.2D,Vm+1.2D}SHA512SU0{Vd.2D,Vd+1.2D},{Vn.2D,Vn+1.2D}SHA512SU1{Vd.2D,Vd+1.2D},{Vn.2D,Vn+1.2D},{Vm.2D,Vm+1.2D} 請注意,上述指令有可能需要暫存器鎖定(register pinning);在微架構之內指定一暫存器且暗示第二暫存器。指令將不再屬於典型RISC三元格式,然而,該等類型操作存在優先,例如,在載入/儲存ARM有限公司之指令的Neon中。 在較廣泛SIMD暫存器可用之情況下,指令之可能的變體包括:SHA512H Od,On,Vm.4D SHA512H2 Od,On,Vm.4D SHA512SU0 Vd.4D,Vn.4D SHA512SU1 Vd.4D,Vn.4D,Vm.4D 該等指令之變體亦處理用於散列之迭代及排程更新操作,但是歸因於較廣泛SIMD暫存器符合三元RISC格式。 使用如FIPS 180-4中所述之截斷,該等指令可同樣地以SHA-384、SHA-512/256及SHA-512/224為目標。 儘管已在本文中參看隨附圖式詳細地描述本發明之說明性實施例,但熟習此項技術者應理解,本發明不限於彼等精確實施例,且在不脫離由附加申請專利範圍界定之本發明之範疇及精神的情況下,可在其中實現各種變化及修改。 2‧‧‧資料處理設備記憶體 4‧‧‧中央處理單元 8‧‧‧通用暫存器檔案 10‧‧‧通用處理電路 12‧‧‧單一指令多重資料暫存器檔案 14‧‧‧中央處理單元 16‧‧‧通用暫存器重新命名及計數電路 18‧‧‧單一指令多重資料暫存器重新命名及計數電路 20‧‧‧指令管線 22‧‧‧指令解碼器 24‧‧‧中斷電路 26‧‧‧檔案 28‧‧‧區塊 30‧‧‧散列演算法 32‧‧‧散列種子值 34‧‧‧散列更新 36‧‧‧排程更新 38‧‧‧中間散列值 40‧‧‧輸出散列值 42‧‧‧向量資料值 44‧‧‧第一部分 第1圖示意圖示包括單一指令多重資料暫存器檔案及單一指令多重資料處理電路之資料處理設備,該單一指令多重資料處理電路包括對執行密碼學處理指令之支援;第2圖示意圖示在散列演算法之一示例性形式之內的資料流;及第3圖示意圖示進一步處理指令如何不遵循與單一指令多重資料處理電路相關聯之一般基於通道之處理。 2‧‧‧資料處理設備 4‧‧‧中央處理單元 6‧‧‧記憶體 8‧‧‧通用暫存器檔案 10‧‧‧通用處理電路 12‧‧‧單一指令多重資料暫存器檔案 14‧‧‧中央處理單元 16‧‧‧通用暫存器重新命名及計數電路 18‧‧‧單一指令多重資料暫存器重新命名及計數電路 20‧‧‧指令管線 22‧‧‧指令解碼器 24‧‧‧中斷電路
权利要求:
Claims (27) [1] 一種資料處理設備,該資料處理設備包含:一單一指令多重資料暫存器檔案;及單一指令多重資料處理電路,該單一指令多重資料處理電路耦接至該單一指令多重資料暫存器檔案且經設置以由一單一指令多重資料程式指令控制,以獨立地對儲存在單獨通道之內的單獨資料元素執行一處理操作,該等單獨通道在該單一指令多重資料暫存器檔案之一輸入運算元暫存器之內;其中該單一指令多重資料處理電路經設置以由一進一步程式指令控制,以對一向量資料值執行一進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案之一輸入運算元暫存器之內的一資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案之一輸出運算元暫存器之內的一輸出運算元,該輸出運算元具有含有一值的一第一部分,該值取決於在該資料元素序列之內的所有資料元素。 [2] 如請求項1所述之資料處理設備,其中該進一步程式指令為一密碼學程式指令,該密碼學程式指令經操作以依賴於形成該向量資料值之資料之複數個字產生作為該輸出運算元之一輸出散列值。 [3] 如請求項2所述之資料處理設備,其中該進一步程式指令執行一迭代處理操作,該迭代處理操作消耗連續資料字及至少部分中間散列值以產生該輸出散列值。 [4] 如請求項1所述之資料處理設備,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值: 其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 [5] 如請求項1所述之資料處理設備,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值:其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 [6] 如請求項4所述之資料處理設備,其中該進一步程式指令包括一欄位,該欄位選擇以下各者中之一者作為OP FUNC(B,C,D):(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D)。 [7] 如請求項4所述之資料處理設備,其中該第一輸入運算元Qd[127:0]及該第二輸入運算元Sn[31:0]讀取自在該單一指令多重資料暫存器檔案之內的單獨暫存器。 [8] 如請求項4所述之資料處理設備,其中該第一輸入運算元Qd[127:0]及該第二輸入運算元Sn[31:0]讀取自在該單一指令多重資料暫存器檔案之內的一共享暫存器。 [9] 如請求項1所述之資料處理設備,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值:其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 [10] 如請求項1所述之資料處理設備,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值: 其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 [11] 如請求項9所述之資料處理設備,其中該第一輸入運算元Qd[127:0]及該第二輸入運算元Qn[127:0]讀取自在該單一指令多重資料暫存器檔案之內的單獨暫存器。 [12] 如請求項9所述之資料處理設備,其中該第一輸入運算元Qd[127:0]及該第二輸入運算元Qn[127:0]讀取自在該單一指令多重資料暫存器檔案之內的一共享暫存器。 [13] 如請求項1所述之資料處理設備,其中該單一指令多重資料處理電路利用用於管理該進一步程式指令及該單一指令多重資料程式指令之處理之共用機制。 [14] 如請求項13所述之資料處理設備,其中該管理處理之步驟包括管理步驟中之一或更多者:暫存器重新命名;指令排程;指令發出;指令報廢;及指令中斷。 [15] 如請求項4所述之資料處理設備,其中該單一指令多重資料處理電路經設置以由一旋轉指令控制,該旋轉指令具有一輸入運算元Sm[31:0]且產生具有一值之一輸出運算元Sd[31:0],該值與Sm[31:0]右旋轉兩個位元位置給出的一值相同。 [16] 如請求項4所述之資料處理設備,其中該單一指令多重資料處理電路經設置以由一第一排程更新指令控制,該第一排程更新指令具有一第一輸入運算元Sp[127:0]及一第二輸入運算元Sq[127:0]且產生具有一值之一輸出運算元Sr[127:0],該值與經由以下步驟給出的一值相同:T[127:0]={Sp[63:0]:Sq[127:64]}及Sr[127:0]=T[127:0]XOR Sr[127:0]XOR Sq[127:0]。 [17] 如請求項14所述之資料處理設備,其中該單一指令多重資料處理電路經設置以由一第二排程更新指令控制,該第二排程更新指令具有一輸入運算元Ss[127:0]且產生具有一值之一輸出運算元St[127:0],該值與經由以下步驟給出的一值相同:T[127:0]=St[127:0]XOR{32{0}:Ss[127:32]};St[95:0]={T[94:64]:T[95]:T[62:32]:T[63]:T[30:0]:T[31]};及St[127:96]=({T[126:96]:T[127]})XOR({T[29:0]:T[31:30]})。 [18] 如請求項9所述之資料處理設備,其中該單一指令多重資料處理電路經設置以由一第一排程更新指令控制,該第一排程更新指令具有一輸入運算元Sp[127:0]且產生具有一值之一輸出運算元Sq[127:0],該值與經由以下步驟給出的一值相同:T[127:0]={Sp[31:0]:Sq[127:32]};T[127:0]=VecROR32(T[127:0],7)XOR VecROR32(T[127:0],18)XOR VecROR32(T[127:0],3);及Sq[127:0]=VecADD32(T[127:0],Sq[127:0]),其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至在B之內的一相應32位元字。 [19] 如請求項18所述之資料處理設備,其中該單一指令多重資料處理電路經設置以由一第二排程更新指令控制,該第二排程更新指令具有一第一輸入運算元Sp[127:0]及一第二輸入運算元Sq[127:0]且產生具有一值之一輸出運算元Sr[127:0],該值與經由以下步驟給出的一值相同:T0[127:0]={Sq[31:0]:Sp[127:32]};T1[63:0]=Sq[127:64];T1[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[63:0],T0[63:0]);T1[63:0]=VecADD32(T3[63:0],T1[63:0]);T2[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR VecROR32(T1[63:0],10);T3[63:0]=VecADD32(Sr[127:64],T0[127:64]);及Sr[127:0]={VecADD32(T3[63:0],T2[63:0]):T1[63:0]},其中VecROR32(A,B)為在A之內的每一32位元字單獨右旋轉B位元位置,且VecADD32(A,B)為在A之內的每一32位元字單獨增加至在B之內的一相應32位元字。 [20] 如請求項1所述之資料處理設備,該資料處理設備進一步包含與該單一指令多重資料暫存器檔案分離之一通用暫存器檔案,該通用暫存器檔案具有通用暫存器,該等通用暫存器具有比在該單一指令多重資料暫存器檔案之內的暫存器之位元寬度低之位元寬度,並且通用處理電路耦接至該通用暫存器檔案,且經設置以由一通用處理指令控制以對儲存在該等通用暫存器中之一者之內的一輸入運算元執行一處理操作。 [21] 一種資料處理設備,該資料處理設備包含:單一指令多重資料暫存器檔案構件,用於儲存單一指令多重資料運算元;及單一指令多重資料處理構件,用於在一單一指令多重資料程式指令之控制下執行一處理操作,該單一指令多重資料處理構件耦接至該單一指令多重資料暫存器檔案構件,且對儲存在該單一指令多重資料暫存器檔案構件之一輸入運算元暫存器之內的單獨通道內之單獨資料元素獨立地執行該處理操作;其中該單一指令多重資料處理構件由一進一步程式指令控制,以對一向量資料值執行一進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案構件之一輸入運算元暫存器之內的一資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案構件之一輸出運算元暫存器之內的一輸出運算元,該輸出運算元具有含有一值的一第一部分,該值取決於在該資料元素序列之內的所有資料元素。 [22] 一種處理資料之方法,該方法包含以下步驟:將單一指令多重資料運算元儲存在一單一指令多重資料暫存器檔案之內;在一單一指令多重資料程式指令之控制下,獨立地對儲存在該單一指令多重資料暫存器檔案之一輸入運算元暫存器之內的單獨通道內的單獨資料元素執行一處理操作;及在一進一步程式指令之控制下,對一向量資料值執行一進一步處理操作,該向量資料值包含保持在該單一指令多重資料暫存器檔案之一輸入運算元暫存器之內的一資料元素序列,以產生儲存在該單一指令多重資料暫存器檔案之一輸出運算元暫存器之內的一輸出運算元,該輸出運算元具有含有一值的一第一部分,該值取決於在該資料元素序列之內的所有資料元素。 [23] 如請求項22所述之方法,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值:其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 [24] 如請求項22所述之方法,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Sn[31:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值: 其中OP FUNC(B,C,D)為以下各者中之一者:(((C XOR D)AND B)XOR D);(B XOR C XOR D);及(B AND C)OR((B OR C)AND D);及ROL(P,Q)為值P左旋轉Q位元位置。 [25] 如請求項22所述之方法,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值: 其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 [26] 如請求項22所述之方法,其中該進一步程式指令具有自該單一指令多重資料暫存器檔案讀取之一第一輸入運算元Qd[127:0]及一第二輸入運算元Qn[127:0]兩者,且該向量資料值包含其中Index為0至2N之Vm[Index+31:Index],其中N為一正整數,該進一步處理操作產生該輸出運算元Qdoutput[127:0],以具有與由以下步驟給出之值相同之一值:其中Choose(B,C,D)為(((C XOR D)AND B)XOR D),Majority(B,C,D)為((B AND C)OR((B OR C)AND D)),Sigma0(B)為(ROR(B,2)XOR ROR(B,13)XOR ROR(B,22)),Sigma1(B)為(ROR(B,6)XOR ROR(B,11)XOR ROR(B,25))且ROR(P,Q)為值P右旋轉Q位元位置。 [27] 一種儲存於一電腦儲存媒體上之電腦程式,該電腦程式用於控制一電腦以提供對應於如請求項1所述之資料處理設備之一虛擬機執行環境。
类似技术:
公开号 | 公开日 | 专利标题 TWI522832B|2016-02-21|支援密碼學之指令 US10908908B2|2021-02-02|Instruction for determining histograms TWI512531B|2015-12-11|用以處理blake安全雜湊演算法的方法、設備、系統及製品 CN106575215B|2020-10-27|处理指令的系统、设备、方法、处理器、介质和电子设备 JP6051458B2|2016-12-27|複数のハッシュ動作を効率的に実行する方法および装置 US10374793B2|2019-08-06|Simon-based hashing for fuse validation US10929504B2|2021-02-23|Bit matrix multiplication US9473296B2|2016-10-18|Instruction and logic for a simon block cipher EP3550764B1|2021-02-17|Hardware accelerators and methods for high-performance authenticated encryption EP3329363B1|2020-10-14|Vector arithmethic instruction US10928847B2|2021-02-23|Apparatuses and methods for frequency scaling a message scheduler data path of a hashing accelerator US9569210B2|2017-02-14|Apparatus and method of execution unit for calculating multiple rounds of a skein hashing algorithm US11080230B2|2021-08-03|Hardware accelerators and methods for out-of-order processing US10241801B2|2019-03-26|Method and apparatus to create register windows for parallel iterations to achieve high performance in HW-SW codesigned loop accelerator
同族专利:
公开号 | 公开日 KR101962104B1|2019-03-26| TWI522832B|2016-02-21| MY168503A|2018-11-12| IN2014CN02111A|2015-05-29| IL231467D0|2014-04-30| KR20140093695A|2014-07-28| GB2497070B|2015-11-25| EP2742421B1|2020-07-01| CN103930869B|2017-10-10| US8966282B2|2015-02-24| US9703966B2|2017-07-11| IL231467A|2020-03-31| JP6068493B2|2017-01-25| US9104400B2|2015-08-11| US20130132737A1|2013-05-23| GB2497070A8|2013-07-10| CN103930869A|2014-07-16| US20150121036A1|2015-04-30| WO2013072657A1|2013-05-23| JP2015501946A|2015-01-19| EP2742421A1|2014-06-18| GB201119834D0|2011-12-28| US20160026806A1|2016-01-28| GB2497070A|2013-06-05|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题 US5918062A|1997-10-23|1999-06-29|Advanced Micro Devices, Inc.|Microprocessor including an efficient implemention of an accumulate instruction| US6377970B1|1998-03-31|2002-04-23|Intel Corporation|Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry| DE10061998A1|2000-12-13|2002-07-18|Infineon Technologies Ag|Kryptographieprozessor| GB2389678A|2002-06-14|2003-12-17|Univ Sheffield|Finite field processor reconfigurable for varying sizes of field.| US7599489B1|2004-02-09|2009-10-06|Sun Microsystems Inc.|Accelerating cryptographic hash computations| US20060190700A1|2005-02-22|2006-08-24|International Business Machines Corporation|Handling permanent and transient errors using a SIMD unit| US7933405B2|2005-04-08|2011-04-26|Icera Inc.|Data access and permute unit| US7536532B2|2006-09-27|2009-05-19|International Business Machines Corporation|Merge operations of data arrays based on SIMD instructions| TWI335528B|2007-05-15|2011-01-01|Htc Corp|A device with multiple functions, and a method for switching the functions and related electronic devices thereof| US20090106526A1|2007-10-22|2009-04-23|David Arnold Luick|Scalar Float Register Overlay on Vector Register File for Efficient Register Allocation and Scalar Float and Vector Register Sharing| GB2456775B|2008-01-22|2012-10-31|Advanced Risc Mach Ltd|Apparatus and method for performing permutation operations on data| US7877582B2|2008-01-31|2011-01-25|International Business Machines Corporation|Multi-addressable register file| US8879725B2|2008-02-29|2014-11-04|Intel Corporation|Combining instructions including an instruction that performs a sequence of transformations to isolate one transformation| GB2464292A|2008-10-08|2010-04-14|Advanced Risc Mach Ltd|SIMD processor circuit for performing iterative SIMD multiply-accumulate operations| US20100115232A1|2008-10-31|2010-05-06|Johnson Timothy J|Large integer support in vector operations| US8595467B2|2009-12-29|2013-11-26|International Business Machines Corporation|Floating point collect and operate| GB2497070B|2011-11-17|2015-11-25|Advanced Risc Mach Ltd|Cryptographic support instructions| US9251377B2|2012-12-28|2016-02-02|Intel Corporation|Instructions processors, methods, and systems to process secure hash algorithms| US9912481B2|2014-03-27|2018-03-06|Intel Corporation|Method and apparatus for efficiently executing hash operations|GB2497070B|2011-11-17|2015-11-25|Advanced Risc Mach Ltd|Cryptographic support instructions| US8838997B2|2012-09-28|2014-09-16|Intel Corporation|Instruction set for message scheduling of SHA256 algorithm| US9128698B2|2012-09-28|2015-09-08|Intel Corporation|Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction| US8953785B2|2012-09-28|2015-02-10|Intel Corporation|Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor| US8874933B2|2012-09-28|2014-10-28|Intel Corporation|Instruction set for SHA1 round processing on 128-bit data paths| GB2508343A|2012-11-28|2014-06-04|Ibm|Replacing a hash function if a second hash function is more effective| US9251377B2|2012-12-28|2016-02-02|Intel Corporation|Instructions processors, methods, and systems to process secure hash algorithms| US8924741B2|2012-12-29|2014-12-30|Intel Corporation|Instruction and logic to provide SIMD secure hashing round slice functionality| US10038550B2|2013-08-08|2018-07-31|Intel Corporation|Instruction and logic to provide a secure cipher hash round functionality| US9425953B2|2013-10-09|2016-08-23|Intel Corporation|Generating multiple secure hashes from a single data buffer| US10503510B2|2013-12-27|2019-12-10|Intel Corporation|SM3 hash function message expansion processors, methods, systems, and instructions| US9912481B2|2014-03-27|2018-03-06|Intel Corporation|Method and apparatus for efficiently executing hash operations| US9513913B2|2014-07-22|2016-12-06|Intel Corporation|SM4 acceleration processors, methods, systems, and instructions| US9317719B2|2014-09-04|2016-04-19|Intel Corporation|SM3 hash algorithm acceleration processors, methods, systems, and instructions| US9467279B2|2014-09-26|2016-10-11|Intel Corporation|Instructions and logic to provide SIMD SM4 cryptographic block cipher functionality| EP3338397B1|2015-08-19|2020-11-04|Intel Corporation|Instructions and logic to provide simd sm3 cryptographic hashing functionality| US9658854B2|2014-09-26|2017-05-23|Intel Corporation|Instructions and logic to provide SIMD SM3 cryptographic hashing functionality| US10348506B2|2016-09-30|2019-07-09|International Business Machines Corporation|Determination of state of padding operation| US10326596B2|2016-10-01|2019-06-18|Intel Corporation|Techniques for secure authentication| US10491377B2|2017-02-28|2019-11-26|Google Llc|Hashing using data parallel instructions| US10833847B2|2017-02-28|2020-11-10|Google Llc|Cryptographic hash generated using data parallel instructions|
法律状态:
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 GB1119834.8A|GB2497070B|2011-11-17|2011-11-17|Cryptographic support instructions| 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|